const invariant = (condition, format, a, b, c, d, e, f) => {
  if (process.env.NODE_ENV !== 'production') {
    if (format === undefined) {
      throw new Error('invariant requires an error message argument');
    }
  }

  if (!condition) {
    let error;
    if (format === undefined) {
      error = new Error('Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.');
    } else {
      const args = [a, b, c, d, e, f];
      const argIndex = 0;
      error = new Error(format.replace(/%s/g, () => args[argIndex + 1]));
      error.name = 'Invariant Violation';
    }

    error.framesToPop = 1; // we don't care about invariant's own frame
    throw error;
  }
};

export default invariant;
